home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / UTIL / Alpha 6.5.sit / Tcl / Modes / htmlMenu.tcl < prev    next >
Text File  |  1996-08-15  |  51KB  |  1,342 lines

  1. #=============================================================================
  2. #    
  3. #    htmlMenu.tcl  (called from html.tcl)
  4. #
  5. #    Part of HTML mode 1.2
  6. #
  7. #    HTML elements definitions and HTML menu.
  8. #
  9. #    Author: Johan Linde <jl@theophys.kth.se>
  10. #
  11. #    If you make improvements to this file, please share them!
  12. #
  13. #=============================================================================
  14. #
  15.  
  16. # Loading of package.
  17. proc htmlLoadPackage {level} {
  18.     global htmlPackageToUse
  19.     global HTMLmodeVars modifiedModeVars
  20.  
  21.     if {$level != $htmlPackageToUse} {    
  22.         set HTMLmodeVars(htmlPackageToUse) $level
  23.         lappend modifiedModeVars {htmlPackageToUse HTMLmodeVars}
  24.         message "Rebuilding HTML menuノ"
  25.         htmlBuildMenu
  26.         htmlUnbindKeys
  27.         message "Done."
  28.     }
  29. }
  30.  
  31. # This proc is not used any more. It now gives a warning message if the user
  32. # call it to define new elements in HTMLprefs.tcl.
  33. proc htmlNewElemVar {{list ""} {var ""} {val ""}} {
  34.     global htmlShownWarning
  35.     if {![info exists htmlShownWarning]} {
  36.         dialog -w 350 -h 290 -t "The way to add custom elements to HTML mode has changed."¥
  37.         10 10 340 45 ¥
  38.         -t "New elements can now be added with the functions found in the submenu HTML Utilities¥
  39.         -> Extend in the HTML menu. However, this submenu is disabled until you remove all¥
  40.         your definitions of custom elements from HTMLPrefs.tcl and restart Alpha."¥
  41.         10 55 340 150¥
  42.         -t "Select 'Help' from the HTML menu and then select 'Extending HTML mode' from the¥
  43.         marks menu in the help file to read more about how to avoid this message and how¥
  44.         to add new elements to HTML mode." 10 160 340 250¥
  45.         -b OK 20 260 85 280
  46.         set htmlShownWarning 1
  47.         enableMenuItem "HTML Utilities" Extend off
  48.     }
  49. }
  50.  
  51. proc htmlSetAttrUsed {num elem used} {
  52.     global htmlElemAttrUsed htmlElemAttrUsed3
  53.     if {![info exists htmlElemAttrUsed${num}($elem)]} {set htmlElemAttrUsed${num}($elem) $used}
  54. }
  55.  
  56. #
  57. # htmlElemAttrRequired: the per-element lists of all required attributes
  58. # htmlElemAttrOptional: the per-element lists of all optional attributes
  59. # htmlElemAttrChoices: element-specific attribute completions
  60. # htmlElemAttrNumber: the per-element list of attributes which are numbers.
  61. # htmlElemEventHandler: the per-element list of JavaScript's event handlers.
  62. # htmlElemAttrUsed: the per-element list of elements asked for in the status bar.
  63. #
  64. # htmlElemAttrOptional has to be defined for every element for everything
  65. # to work.
  66.  
  67. #=============================================================================
  68. #
  69. #     Extensions
  70. #
  71. #=============================================================================
  72.  
  73. proc htmlExtensions {} {
  74.     global htmlElemAttrRequired1 htmlElemAttrOptional1 htmlPlugins
  75.     global htmlElemEventHandler1 htmlElemAttrChoices1 htmlElemAttrNumber1
  76.     
  77.     set htmlElemAttrOptional1(HTML) {}
  78.     set htmlElemAttrOptional1(HEAD) {}
  79.     set htmlElemAttrOptional1(TITLE) {}
  80.     set htmlElemAttrOptional1(BODY)    {BACKGROUND= BGCOLOR= TEXT= LINK= VLINK= ALINK=}
  81.     set htmlElemEventHandler1(BODY)    {onLoad= onUnload=}
  82.     htmlSetAttrUsed ""     BODY {BACKGROUND= BGCOLOR= TEXT= LINK= VLINK=}
  83.     
  84.     set htmlElemAttrOptional1(H1)    {ALIGN= }
  85.     set htmlElemAttrChoices1(H1)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  86.     htmlSetAttrUsed ""     H1    {ALIGN=}
  87.     set htmlElemAttrOptional1(H2)    {ALIGN= }
  88.     set htmlElemAttrChoices1(H2)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  89.     htmlSetAttrUsed ""     H2    {ALIGN=}
  90.     set htmlElemAttrOptional1(H3)    {ALIGN= }
  91.     set htmlElemAttrChoices1(H3)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  92.     htmlSetAttrUsed ""     H3    {ALIGN=}
  93.     set htmlElemAttrOptional1(H4)    {ALIGN= }
  94.     set htmlElemAttrChoices1(H4)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  95.     htmlSetAttrUsed ""     H4    {ALIGN=}
  96.     set htmlElemAttrOptional1(H5)    {ALIGN= }
  97.     set htmlElemAttrChoices1(H5)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  98.     htmlSetAttrUsed ""     H5    {ALIGN=}
  99.     set htmlElemAttrOptional1(H6)    {ALIGN= }
  100.     set htmlElemAttrChoices1(H6)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  101.     htmlSetAttrUsed ""     H6    {ALIGN=}
  102.     
  103.     set htmlElemAttrOptional1(P)    {ALIGN= }
  104.     set htmlElemAttrChoices1(P)        {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  105.     htmlSetAttrUsed ""     P    {ALIGN=}
  106.     set htmlElemAttrOptional1(BLOCKQUOTE) {}
  107.     set htmlElemAttrOptional1(DIV)    {ALIGN= }
  108.     set htmlElemAttrChoices1(DIV)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  109.     htmlSetAttrUsed ""        DIV    {ALIGN=}
  110.     set htmlElemAttrOptional1(ADDRESS) {}
  111.     set htmlElemAttrOptional1(CENTER) {}
  112.     set htmlElemAttrOptional1(PRE)    {WIDTH= }
  113.     set htmlElemAttrNumber1(PRE)     {WIDTH=1:i:n}
  114.     set htmlElemAttrRequired1(MULTICOL)    {COLS=}
  115.     set htmlElemAttrOptional1(MULTICOL)    {GUTTER= WIDTH=}
  116.     set htmlElemAttrNumber1(MULTICOL)    {COLS=2:i:n GUTTER=0:i:n WIDTH=1:i:%}
  117.     htmlSetAttrUsed "" MULTICOL {COLS= GUTTER= WIDTH=}
  118.     set htmlElemAttrRequired1(SPACER)    {TYPE=}
  119.     set htmlElemAttrOptional1(SPACER)    {SIZE= WIDTH= HEIGHT= ALIGN=}
  120.     set htmlElemAttrNumber1(SPACER)    {SIZE=1:i:n WIDTH=1:i:% HEIGHT=1:i:%}
  121.     set htmlElemAttrChoices1(SPACER) {TYPE=HORIZONTAL TYPE=VERTICAL TYPE=BLOCK ALIGN=TOP 
  122.     ALIGN=MIDDLE ALIGN=BOTTOM ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE}
  123.     htmlSetAttrUsed "" SPACER {TYPE= SIZE= WIDTH= HEIGHT= ALIGN=}
  124.     set htmlElemAttrOptional1(BR)    {CLEAR= }
  125.     set htmlElemAttrChoices1(BR)    {CLEAR=ALL CLEAR=LEFT CLEAR=RIGHT CLEAR=NONE}
  126.     set htmlElemAttrOptional1(HR)    {ALIGN= SIZE= WIDTH= NOSHADE}
  127.     set htmlElemAttrChoices1(HR)    {ALIGN=LEFT ALIGN=RIGHT ALIGN=CENTER}
  128.     set htmlElemAttrNumber1(HR)     {SIZE=1:i:n WIDTH=1:i:%}
  129.     set htmlElemAttrOptional1(NOBR) {}
  130.     set htmlElemAttrOptional1(WBR)     {}
  131.     
  132.     set htmlElemAttrOptional1(FONT)    {SIZE= COLOR= FACE=}
  133.     set htmlElemAttrNumber1(FONT)    {SIZE=1:7:n}
  134.     htmlSetAttrUsed ""        FONT    {SIZE=}
  135.     set htmlElemAttrRequired1(BASEFONT)    {SIZE=}
  136.     set htmlElemAttrOptional1(BASEFONT) {}
  137.     set htmlElemAttrNumber1(BASEFONT)    {SIZE=1:7:n}
  138.     set htmlElemAttrOptional1(B) {}
  139.     set htmlElemAttrOptional1(I) {}
  140.     set htmlElemAttrOptional1(STRIKE) {}
  141.     set htmlElemAttrOptional1(U) {}
  142.     set htmlElemAttrOptional1(SUB) {}
  143.     set htmlElemAttrOptional1(SUP) {}
  144.     set htmlElemAttrOptional1(BIG) {}
  145.     set htmlElemAttrOptional1(SMALL) {}
  146.     set htmlElemAttrOptional1(EM) {}
  147.     set htmlElemAttrOptional1(STRONG) {}
  148.     set htmlElemAttrOptional1(DFN) {}
  149.     set htmlElemAttrOptional1(CODE) {}
  150.     set htmlElemAttrOptional1(VAR) {}
  151.     set htmlElemAttrOptional1(CITE) {}
  152.     set htmlElemAttrOptional1(KBD) {}
  153.     set htmlElemAttrOptional1(TT) {}
  154.     set htmlElemAttrOptional1(SAMP) {}
  155.     set htmlElemAttrOptional1(BLINK) {}
  156.     
  157.     set htmlElemAttrOptional1(A)    {HREF= NAME= TARGET= REL= REV=  TITLE= }
  158.     set htmlElemEventHandler1(A)    {onClick= onMouseOver= onMouseOut=}
  159.     htmlSetAttrUsed ""        A    {HREF= NAME=}
  160.     set htmlElemAttrRequired1(IMG)    {SRC=}
  161.     set htmlElemAttrOptional1(IMG)    {LOWSRC= WIDTH= HEIGHT=  BORDER= 
  162.     ALIGN= ALT= HSPACE= VSPACE= USEMAP= ISMAP}
  163.     set htmlElemAttrChoices1(IMG)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  164.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE}
  165.     set htmlElemAttrNumber1(IMG) {BORDER=0:i:n WIDTH=1:i:% HEIGHT=1:i:%
  166.     HSPACE=0:i:n VSPACE=0:i:n}
  167.     set htmlElemEventHandler1(IMG)    {onAbort= onError= onLoad=}
  168.     htmlSetAttrUsed ""        IMG    {SRC= WIDTH= HEIGHT= ALIGN= ALT=}
  169.     
  170.     set htmlElemAttrRequired1(EMBED)    {SRC= WIDTH= HEIGHT=}
  171.     set htmlElemAttrOptional1(EMBED)    {HSPACE= VSPACE= ALIGN=}
  172.     set htmlElemAttrNumber1(EMBED) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  173.     set htmlElemAttrChoices1(EMBED)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  174.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE}
  175.     set htmlElemAttrOptional1(NOEMBED) {}
  176.     set htmlElemAttrRequired1(LIVEAUDIO) {SRC= WIDTH= HEIGHT=}
  177.     set htmlElemAttrOptional1(LIVEAUDIO)    {HSPACE= VSPACE= ALIGN= AUTOSTART= LOOP=}
  178.     set htmlElemAttrNumber1(LIVEAUDIO) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  179.     set htmlElemAttrChoices1(LIVEAUDIO)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  180.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE 
  181.     AUTOSTART=TRUE AUTOSTART=FALSE LOOP=TRUE LOOP=FALSE}
  182.     htmlSetAttrUsed "" LIVEAUDIO {SRC= WIDTH= HEIGHT= AUTOSTART= LOOP=}
  183.     set htmlElemAttrRequired1(LIVEVIDEO) {SRC= WIDTH= HEIGHT=}
  184.     set htmlElemAttrOptional1(LIVEVIDEO)    {HSPACE= VSPACE= ALIGN= AUTOSTART= LOOP= CONTROLS=}
  185.     set htmlElemAttrNumber1(LIVEVIDEO) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  186.     set htmlElemAttrChoices1(LIVEVIDEO)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  187.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE 
  188.     AUTOSTART=TRUE AUTOSTART=FALSE LOOP=TRUE LOOP=FALSE CONTROLS=TRUE CONTROLS=FALSE}
  189.     htmlSetAttrUsed "" LIVEVIDEO {SRC= WIDTH= HEIGHT= AUTOSTART= LOOP= CONTROLS=}
  190.     set htmlElemAttrRequired1([list QUICKTIME MOVIE])    {SRC= }
  191.     set htmlElemAttrOptional1([list QUICKTIME MOVIE])    {WIDTH= HEIGHT= HSPACE= VSPACE= ALIGN=
  192.     HIDDEN= AUTOPLAY= CONTROLLER= LOOP= PLAYEVERYFRAME= HREF= TARGET= PLUGINSPAGE=}
  193.     set htmlElemAttrNumber1([list QUICKTIME MOVIE]) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  194.     set htmlElemAttrChoices1([list QUICKTIME MOVIE])    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  195.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE HIDDEN=TRUE HIDDEN=FALSE
  196.     AUTOPLAY=TRUE AUTOPLAY=FALSE CONTROLLER=TRUE CONTROLLER=FALSE LOOP=TRUE LOOP=FALSE 
  197.     LOOP=PALINDROME PLAYEVERYFRAME=TRUE PLAYEVERYFRAME=FALSE}
  198.     htmlSetAttrUsed "" "QUICKTIME MOVIE" {SRC= WIDTH= HEIGHT= HIDDEN= AUTOPLAY= CONTROLLER= LOOP= 
  199.     PLAYEVERYFRAME=}
  200.     set htmlElemAttrRequired1([list QUICKTIME VR])    {SRC= WIDTH= HEIGHT=}
  201.     set htmlElemAttrOptional1([list QUICKTIME VR])    {HSPACE= VSPACE= ALIGN= PAN= TILT= FOV=
  202.     NODE= CORRECTION= PLUGINSPAGE=}
  203.     set htmlElemAttrNumber1([list QUICKTIME VR]) {WIDTH=1:i:n HEIGHT=1:i:n 
  204.     HSPACE=1:i:n VSPACE=1:i:n PAN=0:360:n TILT=-360:360:n FOV=-360:360:n NODE=0:i:n}
  205.     set htmlElemAttrChoices1([list QUICKTIME VR])    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  206.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE
  207.     CORRECTION=NONE CORRECTION=PARTIAL CORRECTION=FULL}
  208.     htmlSetAttrUsed "" "QUICKTIME VR" {SRC= WIDTH= HEIGHT= PAN= TILT= FOV=
  209.     NODE= CORRECTION=}
  210.     set htmlElemAttrRequired1(REALAUDIO)    {SRC= WIDTH= HEIGHT=}
  211.     set htmlElemAttrOptional1(REALAUDIO)    {HSPACE= VSPACE= ALIGN= CONTROLS= AUTOSTART=
  212.     NOLABELS= CONSOLE=}
  213.     set htmlElemAttrNumber1(REALAUDIO) {WIDTH=1:i:n HEIGHT=1:i:n HSPACE=1:i:n VSPACE=1:i:n}
  214.     set htmlElemAttrChoices1(REALAUDIO)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  215.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE ALIGN=BASELINE
  216.     CONTROLS=ALL CONTROLS=CONTROLPANEL CONTROLS=INFOVOLUMEPANEL CONTROLS=INFOPANEL
  217.     CONTROLS=STATUSBAR CONTROLS=PLAYBUTTON CONTROLS=STOPBUTTON CONTROLS=VOLUMESLIDER
  218.     CONTROLS=POSITIONSLIDER CONTROLS=POSITIONFIELD CONTROLS=STATUSFIELD
  219.     AUTOSTART=TRUE AUTOSTART=FALSE NOLABELS=TRUE NOLABELS=FALSE}
  220.     htmlSetAttrUsed "" REALAUDIO {SRC= WIDTH= HEIGHT= CONTROLS= AUTOSTART=
  221.     NOLABELS= CONSOLE=}
  222.         
  223.     set htmlElemAttrOptional1(UL)    {TYPE= COMPACT}
  224.     set htmlElemAttrChoices1(UL)    {TYPE=DISC TYPE=CIRCLE TYPE=SQUARE}
  225.     set htmlElemAttrOptional1([list LI IN UL])    {TYPE=}
  226.     set htmlElemAttrChoices1([list LI IN UL])    {TYPE=DISC TYPE=CIRCLE TYPE=SQUARE}
  227.     set htmlElemAttrOptional1(OL)    {TYPE= START= COMPACT}
  228.     set htmlElemAttrChoices1(OL)    {TYPE=A TYPE=a TYPE=I TYPE=i TYPE=1}
  229.     set htmlElemAttrNumber1(OL)    {START=1:i:n}
  230.     set htmlElemAttrOptional1([list LI IN OL])    {TYPE= VALUE=}
  231.     set htmlElemAttrNumber1([list LI IN OL])    {VALUE=1:i:n}
  232.     set htmlElemAttrChoices1([list LI IN OL])    {TYPE=A TYPE=a TYPE=I TYPE=i TYPE=1}
  233.     set htmlElemAttrOptional1(DIR) {COMPACT}
  234.     set htmlElemAttrOptional1(MENU) {COMPACT}
  235.     set htmlElemAttrOptional1(LI) {}
  236.     set htmlElemAttrOptional1(DL) {COMPACT}
  237.     set htmlElemAttrOptional1(DT) {}
  238.     set htmlElemAttrOptional1(DD)    {}
  239.     
  240.     set htmlElemAttrOptional1(FORM)    {ACTION= METHOD= ENCTYPE= TARGET= NAME=}
  241.     set htmlElemAttrChoices1(FORM)    {METHOD=POST METHOD=GET}
  242.     set htmlElemEventHandler1(FORM)    {onSubmit=}
  243.     htmlSetAttrUsed ""        FORM    {ACTION= METHOD= }
  244.     set htmlElemAttrRequired1(TEXT)    {NAME=}
  245.     set htmlElemAttrOptional1(TEXT)    {VALUE= SIZE= MAXLENGTH=}
  246.     set htmlElemAttrNumber1(TEXT)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  247.     set htmlElemEventHandler1(TEXT)    {onBlur= onChange= onFocus= onSelect=}
  248.     htmlSetAttrUsed ""     TEXT    {NAME= VALUE= SIZE= MAXLENGTH=}
  249.     set htmlElemAttrRequired1(CHECKBOX)    {NAME= VALUE=}
  250.     set htmlElemAttrOptional1(CHECKBOX)    {CHECKED}
  251.     set htmlElemEventHandler1(CHECKBOX)    {onClick=}
  252.     htmlSetAttrUsed ""     CHECKBOX    {NAME= VALUE= CHECKED}
  253.     set htmlElemAttrRequired1(BUTTON)    {VALUE=}
  254.     set htmlElemAttrOptional1(BUTTON)    {NAME=}
  255.     set htmlElemEventHandler1(BUTTON)    {onClick=}
  256.     htmlSetAttrUsed ""     BUTTON    {VALUE= NAME=}
  257.     set htmlElemAttrRequired1(RADIO)    {NAME= VALUE=}
  258.     set htmlElemAttrOptional1(RADIO)    {CHECKED}
  259.     set htmlElemEventHandler1(RADIO)    {onClick=}
  260.     htmlSetAttrUsed ""     RADIO    {NAME= VALUE= CHECKED}
  261.     set htmlElemAttrOptional1(SUBMIT)    {NAME= VALUE=}
  262.     set htmlElemEventHandler1(SUBMIT)    {onClick=}
  263.     htmlSetAttrUsed ""     SUBMIT    {VALUE= }
  264.     set htmlElemAttrOptional1(RESET)    {VALUE= }
  265.     set htmlElemEventHandler1(RESET)    {onClick=}
  266.     htmlSetAttrUsed ""     RESET    {VALUE= }
  267.     set htmlElemAttrRequired1(PASSWORD)    {NAME= }
  268.     set htmlElemAttrOptional1(PASSWORD)    {VALUE= SIZE= MAXLENGTH=}
  269.     set htmlElemAttrNumber1(PASSWORD)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  270.     htmlSetAttrUsed ""     PASSWORD    {NAME= VALUE= SIZE= MAXLENGTH=}
  271.     set htmlElemAttrRequired1(HIDDEN)    {NAME= VALUE=}
  272.     set htmlElemAttrOptional1(HIDDEN)    {}
  273.     set htmlElemAttrRequired1(IMAGE)    {NAME= SRC=}
  274.     set htmlElemAttrOptional1(IMAGE)    {ALIGN=}
  275.     set htmlElemAttrChoices1(IMAGE)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  276.     ALIGN=LEFT ALIGN=RIGHT}
  277.     set htmlElemAttrRequired1(FILE)    {NAME= }
  278.     set htmlElemAttrOptional1(FILE)    {}
  279.     set htmlElemAttrRequired1(SELECT)    {NAME= }
  280.     set htmlElemAttrOptional1(SELECT)    {SIZE= MULTIPLE}
  281.     set htmlElemAttrNumber1(SELECT)    {SIZE=1:i:n}
  282.     set htmlElemEventHandler1(SELECT)    {onBlur= onChange= onFocus=}
  283.     htmlSetAttrUsed ""        SELECT    {NAME= SIZE= MULTIPLE}
  284.     set htmlElemAttrOptional1(OPTION)    {VALUE= SELECTED}
  285.     htmlSetAttrUsed ""        OPTION    {SELECTED}
  286.     set htmlElemAttrRequired1(TEXTAREA)    {NAME= ROWS= COLS=}
  287.     set htmlElemAttrOptional1(TEXTAREA)    {WRAP=}
  288.     set htmlElemAttrNumber1(TEXTAREA)    {ROWS=1:i:n COLS=1:i:n}
  289.     set htmlElemAttrChoices1(TEXTAREA) {WRAP=VIRTUAL WRAP=PHYSICAL WRAP=OFF}
  290.     set htmlElemEventHandler1(TEXTAREA)    {onBlur= onChange= onFocus= onSelect=}
  291.     
  292.     set htmlElemAttrOptional1(TABLE)    {BORDER= CELLSPACING= CELLPADDING= WIDTH= 
  293.     ALIGN= BGCOLOR=}
  294.     set htmlElemAttrChoices1(TABLE)    {ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT}
  295.     set htmlElemAttrNumber1(TABLE)    {BORDER=0:i:n CELLSPACING=0:i:n 
  296.     CELLPADDING=0:i:n WIDTH=1:i:%}
  297.     htmlSetAttrUsed ""     TABLE    {BORDER= CELLSPACING= CELLPADDING=}
  298.     set htmlElemAttrOptional1(TD)    {ALIGN= VALIGN= COLSPAN= ROWSPAN= WIDTH= NOWRAP
  299.     BGCOLOR=}
  300.     set htmlElemAttrChoices1(TD)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT 
  301.     VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  302.     set htmlElemAttrNumber1(TD)    {COLSPAN=1:i:n ROWSPAN=1:i:n WIDTH=1:i:%}
  303.     htmlSetAttrUsed ""     TD    {ALIGN= VALIGN= COLSPAN= ROWSPAN= NOWRAP}
  304.     set htmlElemAttrOptional1(TH)    {ALIGN= VALIGN= COLSPAN= ROWSPAN= WIDTH= NOWRAP
  305.     BGCOLOR=}
  306.     set htmlElemAttrChoices1(TH)    {ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT 
  307.     VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  308.     set htmlElemAttrNumber1(TH)    {COLSPAN=1:i:n ROWSPAN=1:i:n WIDTH=1:i:%}
  309.     htmlSetAttrUsed ""     TH    {ALIGN= VALIGN= COLSPAN= ROWSPAN= NOWRAP }
  310.     set htmlElemAttrOptional1(TR)    {ALIGN= VALIGN= BGCOLOR=}
  311.     set htmlElemAttrChoices1(TR)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT  
  312.     VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  313.     htmlSetAttrUsed ""        TR    {ALIGN= VALIGN=}
  314.     set htmlElemAttrOptional1(CAPTION)    {ALIGN=}
  315.     set htmlElemAttrChoices1(CAPTION)    {ALIGN=BOTTOM ALIGN=TOP }
  316.     htmlSetAttrUsed ""     CAPTION    {ALIGN=}
  317.     
  318.     set htmlElemAttrOptional1(FRAMESET) {ROWS= COLS= FRAMEBORDER= BORDER= BORDERCOLOR=}
  319.     set htmlElemAttrNumber1(FRAMESET)    {BORDER=0:i:n}
  320.     set htmlElemAttrChoices1(FRAMESET)    {FRAMEBORDER=YES FRAMEBORDER=NO}
  321.     set htmlElemEventHandler1(FRAMESET)    {onLoad= onUnload=}
  322.     htmlSetAttrUsed ""        FRAMESET {ROWS= COLS=}
  323.     set htmlElemAttrRequired1(FRAME)    {SRC=}
  324.     set htmlElemAttrOptional1(FRAME)    {NAME= MARGINWIDTH= MARGINHEIGHT= SCROLLING=
  325.     NORESIZE FRAMEBORDER= BORDERCOLOR=}
  326.     set htmlElemAttrChoices1(FRAME)    {SCROLLING=YES SCROLLING=NO SCROLLING=AUTO 
  327.     FRAMEBORDER=YES FRAMEBORDER=NO}
  328.     set htmlElemAttrNumber1(FRAME)    {MARGINWIDTH=1:i:n MARGINHEIGHT=1:i:n}
  329.     htmlSetAttrUsed ""        FRAME    {SRC= NAME= }
  330.     set htmlElemAttrOptional1(NOFRAMES) {}
  331.     
  332.     set htmlElemAttrRequired1(MAP)        {NAME=}
  333.     set htmlElemAttrOptional1(MAP)        {}
  334.     set htmlElemAttrOptional1(AREA)    {SHAPE= COORDS= TARGET= HREF= NOHREF ALT=}
  335.     set htmlElemAttrChoices1(AREA)    {SHAPE=RECT SHAPE=CIRCLE SHAPE=POLY
  336.     SHAPE=DEFAULT}
  337.     set htmlElemEventHandler1(AREA)    {onClick= onMouseOver= onMouseOut=}
  338.     htmlSetAttrUsed ""        AREA    {SHAPE= COORDS= HREF= NOHREF}
  339.     
  340.     set htmlElemAttrRequired1(APPLET)    {CODE= WIDTH= HEIGHT=}
  341.     set htmlElemAttrOptional1(APPLET)     {CODEBASE= HSPACE= VSPACE= ALIGN= NAME= ALT=}
  342.     set htmlElemAttrChoices1(APPLET)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  343.     ALIGN=LEFT ALIGN=RIGHT ALIGN=TEXTTOP ALIGN=ABSMIDDLE
  344.     ALIGN=BASELINE}
  345.     set htmlElemAttrNumber1(APPLET)     {VSPACE=0:i:n HSPACE=0:i:n WIDTH=1:i:n
  346.     HEIGHT=1:i:n}
  347.     htmlSetAttrUsed ""        APPLET    {CODE= WIDTH= HEIGHT= CODEBASE= ALIGN= }
  348.     set htmlElemAttrRequired1(PARAM)    {NAME= VALUE=}
  349.     set htmlElemAttrOptional1(PARAM)    {}
  350.     set htmlElemAttrOptional1(SCRIPT)    {LANGUAGE= SRC=}
  351.     set htmlElemAttrChoices1(SCRIPT)    {LANGUAGE=JAVASCRIPT}
  352.     htmlSetAttrUsed ""        SCRIPT    {LANGUAGE=}
  353.     set htmlElemAttrOptional1(NOSCRIPT) {}
  354.     
  355.     set htmlElemAttrOptional1(BASE)    {HREF= TARGET=}
  356.     htmlSetAttrUsed ""        BASE    {HREF= }
  357.     set htmlElemAttrOptional1(ISINDEX)    {ACTION= PROMPT=}
  358.     set htmlElemAttrOptional1(LINK)    {HREF=  REL= REV= TITLE= ID=}
  359.     htmlSetAttrUsed ""        LINK    {HREF=}
  360.     set htmlElemAttrRequired1(META)    {HTTP-EQUIV= CONTENT=}
  361.     set htmlElemAttrOptional1(META)    {NAME= }
  362. }
  363.  
  364. #=============================================================================
  365. #
  366. #     HTML 3.2
  367. #
  368. #=============================================================================
  369.  
  370. proc html32 {} {
  371.     global htmlElemAttrRequired3 htmlElemAttrOptional3
  372.     global htmlElemAttrChoices3 htmlElemAttrNumber3
  373.     
  374.     set htmlElemAttrOptional3(HTML) {}
  375.     set htmlElemAttrOptional3(HEAD) {}
  376.     set htmlElemAttrOptional3(TITLE) {}
  377.     set htmlElemAttrOptional3(BODY)    {BACKGROUND= BGCOLOR= TEXT= LINK= VLINK= ALINK=}
  378.     htmlSetAttrUsed 3 BODY {BACKGROUND= BGCOLOR= TEXT= LINK= VLINK=}
  379.     
  380.     set htmlElemAttrOptional3(H1)    {ALIGN= }
  381.     set htmlElemAttrChoices3(H1)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  382.     htmlSetAttrUsed 3 H1    {ALIGN=}
  383.     set htmlElemAttrOptional3(H2)    {ALIGN= }
  384.     set htmlElemAttrChoices3(H2)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  385.     htmlSetAttrUsed 3 H2    {ALIGN=}
  386.     set htmlElemAttrOptional3(H3)    {ALIGN= }
  387.     set htmlElemAttrChoices3(H3)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  388.     htmlSetAttrUsed 3 H3    {ALIGN=}
  389.     set htmlElemAttrOptional3(H4)    {ALIGN= }
  390.     set htmlElemAttrChoices3(H4)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  391.     htmlSetAttrUsed 3 H4    {ALIGN=}
  392.     set htmlElemAttrOptional3(H5)    {ALIGN= }
  393.     set htmlElemAttrChoices3(H5)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  394.     htmlSetAttrUsed 3 H5    {ALIGN=}
  395.     set htmlElemAttrOptional3(H6)    {ALIGN= }
  396.     set htmlElemAttrChoices3(H6)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  397.     htmlSetAttrUsed 3 H6    {ALIGN=}
  398.     
  399.     set htmlElemAttrOptional3(P)    {ALIGN= }
  400.     set htmlElemAttrChoices3(P)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  401.     htmlSetAttrUsed 3 P    {ALIGN=}
  402.     set htmlElemAttrOptional3(BLOCKQUOTE) {}
  403.     set htmlElemAttrOptional3(DIV)    {ALIGN= }
  404.     set htmlElemAttrChoices3(DIV)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT}
  405.     htmlSetAttrUsed 3 DIV    {ALIGN=}
  406.     set htmlElemAttrOptional3(ADDRESS) {}
  407.     set htmlElemAttrOptional3(CENTER) {}
  408.     set htmlElemAttrOptional3(PRE)    {WIDTH= }
  409.     set htmlElemAttrNumber3(PRE)    {WIDTH=1:i:n}
  410.     set htmlElemAttrOptional3(BR)    {CLEAR= }
  411.     set htmlElemAttrChoices3(BR)    {CLEAR=ALL CLEAR=LEFT CLEAR=RIGHT CLEAR=NONE}
  412.     set htmlElemAttrOptional3(HR)    {ALIGN= SIZE= WIDTH= NOSHADE}
  413.     set htmlElemAttrChoices3(HR)    {ALIGN=LEFT ALIGN=RIGHT ALIGN=CENTER}
  414.     set htmlElemAttrNumber3(HR)     {SIZE=1:i:n WIDTH=1:i:%}
  415.     
  416.     set htmlElemAttrOptional3(FONT)    {SIZE= COLOR=}
  417.     set htmlElemAttrNumber3(FONT)    {SIZE=1:7:n}
  418.     htmlSetAttrUsed 3 FONT    {SIZE=}
  419.     set htmlElemAttrOptional3(B) {}
  420.     set htmlElemAttrOptional3(I) {}
  421.     set htmlElemAttrOptional3(STRIKE) {}
  422.     set htmlElemAttrOptional3(U) {}
  423.     set htmlElemAttrOptional3(SUB) {}
  424.     set htmlElemAttrOptional3(SUP) {}
  425.     set htmlElemAttrOptional3(BIG) {}
  426.     set htmlElemAttrOptional3(SMALL) {}
  427.     set htmlElemAttrOptional3(EM) {}
  428.     set htmlElemAttrOptional3(STRONG) {}
  429.     set htmlElemAttrOptional3(DFN)    {}
  430.     set htmlElemAttrOptional3(CODE) {}
  431.     set htmlElemAttrOptional3(VAR) {}
  432.     set htmlElemAttrOptional3(CITE) {}
  433.     set htmlElemAttrOptional3(KBD) {}
  434.     set htmlElemAttrOptional3(TT) {}
  435.     set htmlElemAttrOptional3(SAMP) {}
  436.     
  437.     set htmlElemAttrOptional3(A)    {HREF= NAME= REL= REV=  TITLE= }
  438.     htmlSetAttrUsed 3 A    {HREF= NAME=}
  439.     set htmlElemAttrRequired3(IMG)    {SRC=}
  440.     set htmlElemAttrOptional3(IMG)    {WIDTH= HEIGHT=  BORDER= 
  441.     ALIGN= ALT= HSPACE= VSPACE= USEMAP= ISMAP}
  442.     set htmlElemAttrChoices3(IMG)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  443.     ALIGN=LEFT ALIGN=RIGHT}
  444.     set htmlElemAttrNumber3(IMG) {BORDER=0:i:n WIDTH=1:i:n HEIGHT=1:i:n
  445.     HSPACE=0:i:n VSPACE=0:i:n}
  446.     htmlSetAttrUsed 3 IMG    {SRC= WIDTH= HEIGHT= ALIGN= ALT=}
  447.     
  448.     set htmlElemAttrOptional3(UL)    {TYPE= COMPACT}
  449.     set htmlElemAttrChoices3(UL)    {TYPE=DISC TYPE=CIRCLE TYPE=SQUARE}
  450.     set htmlElemAttrOptional3([list LI IN UL])    {TYPE=}
  451.     set htmlElemAttrChoices3([list LI IN UL])    {TYPE=DISC TYPE=CIRCLE TYPE=SQUARE}
  452.     set htmlElemAttrOptional3(OL)    {TYPE= START= COMPACT}
  453.     set htmlElemAttrChoices3(OL)    {TYPE=A TYPE=a TYPE=I TYPE=i TYPE=1}
  454.     set htmlElemAttrNumber3(OL)    {START=1:i:n}
  455.     set htmlElemAttrOptional3([list LI IN OL])    {TYPE= VALUE=}
  456.     set htmlElemAttrNumber3([list LI IN OL])    {VALUE=1:i:n}
  457.     set htmlElemAttrChoices3([list LI IN OL])    {TYPE=A TYPE=a TYPE=I TYPE=i TYPE=1}
  458.     set htmlElemAttrOptional3(DIR) {COMPACT}
  459.     set htmlElemAttrOptional3(MENU) {COMPACT}
  460.     set htmlElemAttrOptional3(LI) {}
  461.     set htmlElemAttrOptional3(DL) {COMPACT}
  462.     set htmlElemAttrOptional3(DT) {}
  463.     set htmlElemAttrOptional3(DD)    {}
  464.     
  465.     set htmlElemAttrOptional3(FORM)    {ACTION= METHOD= ENCTYPE= }
  466.     set htmlElemAttrChoices3(FORM)    {METHOD=POST METHOD=GET}
  467.     htmlSetAttrUsed 3 FORM    {ACTION= METHOD= }
  468.     set htmlElemAttrRequired3(TEXT)    {NAME=}
  469.     set htmlElemAttrOptional3(TEXT)    {VALUE= SIZE= MAXLENGTH=}
  470.     set htmlElemAttrNumber3(TEXT)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  471.     htmlSetAttrUsed 3 TEXT    {NAME= VALUE= SIZE= MAXLENGTH=}
  472.     set htmlElemAttrRequired3(CHECKBOX)    {NAME= VALUE=}
  473.     set htmlElemAttrOptional3(CHECKBOX)    {CHECKED}
  474.     htmlSetAttrUsed 3 CHECKBOX    {NAME= VALUE= CHECKED}
  475.     set htmlElemAttrRequired3(RADIO)    {NAME= VALUE=}
  476.     set htmlElemAttrOptional3(RADIO)    {CHECKED}
  477.     htmlSetAttrUsed 3 RADIO    {NAME= VALUE= CHECKED}
  478.     set htmlElemAttrOptional3(SUBMIT)    {NAME= VALUE=}
  479.     htmlSetAttrUsed 3 SUBMIT    {VALUE= }
  480.     set htmlElemAttrOptional3(RESET)    {VALUE= }
  481.     htmlSetAttrUsed 3 RESET    {VALUE= }
  482.     set htmlElemAttrRequired3(PASSWORD)    {NAME= }
  483.     set htmlElemAttrOptional3(PASSWORD)    {VALUE= SIZE= MAXLENGTH=}
  484.     set htmlElemAttrNumber3(PASSWORD)    {SIZE=1:i:n MAXLENGTH=1:i:n}
  485.     htmlSetAttrUsed 3 PASSWORD    {NAME= VALUE= SIZE= MAXLENGTH=}
  486.     set htmlElemAttrRequired3(HIDDEN)    {NAME= VALUE=}
  487.     set htmlElemAttrOptional3(HIDDEN)    {}
  488.     set htmlElemAttrRequired3(IMAGE)    {NAME= SRC=}
  489.     set htmlElemAttrOptional3(IMAGE)    {ALIGN=}
  490.     set htmlElemAttrChoices3(IMAGE)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM
  491.     ALIGN=LEFT ALIGN=RIGHT}
  492.     set htmlElemAttrRequired3(FILE)    {NAME= }
  493.     set htmlElemAttrOptional3(FILE)    {}
  494.     set htmlElemAttrRequired3(SELECT)    {NAME= }
  495.     set htmlElemAttrOptional3(SELECT)    {SIZE= MULTIPLE}
  496.     set htmlElemAttrNumber3(SELECT)     {SIZE=1:i:n}
  497.     htmlSetAttrUsed 3 SELECT    {NAME= SIZE= MULTIPLE}
  498.     set htmlElemAttrOptional3(OPTION)    {VALUE= SELECTED}
  499.     htmlSetAttrUsed 3 OPTION    {SELECTED}
  500.     set htmlElemAttrRequired3(TEXTAREA)    {NAME= ROWS= COLS=}
  501.     set htmlElemAttrOptional3(TEXTAREA)    {}
  502.     set htmlElemAttrNumber3(TEXTAREA)    {ROWS=1:i:n COLS=1:i:n}
  503.     
  504.     set htmlElemAttrOptional3(TABLE)    {BORDER= CELLSPACING= CELLPADDING= WIDTH= 
  505.     ALIGN=}
  506.     set htmlElemAttrChoices3(TABLE)    {ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT}
  507.     set htmlElemAttrNumber3(TABLE)    {BORDER=0:i:n CELLSPACING=0:i:n 
  508.     CELLPADDING=0:i:n WIDTH=1:i:%}
  509.     htmlSetAttrUsed 3 TABLE    {BORDER= CELLSPACING= CELLPADDING=}
  510.     set htmlElemAttrOptional3(TD)    {ALIGN= VALIGN= COLSPAN= ROWSPAN=  NOWRAP}
  511.     set htmlElemAttrChoices3(TD)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT 
  512.     VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  513.     set htmlElemAttrNumber3(TD)    {COLSPAN=1:i:n ROWSPAN=1:i:n}
  514.     htmlSetAttrUsed 3 TD    {ALIGN= VALIGN= COLSPAN= ROWSPAN= NOWRAP}
  515.     set htmlElemAttrOptional3(TH)    {ALIGN= VALIGN= COLSPAN= ROWSPAN=  NOWRAP}
  516.     set htmlElemAttrChoices3(TH)    {ALIGN=LEFT ALIGN=CENTER ALIGN=RIGHT 
  517.     VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  518.     set htmlElemAttrNumber3(TH)    {COLSPAN=1:i:n ROWSPAN=1:i:n}
  519.     htmlSetAttrUsed 3 TH    {ALIGN= VALIGN= COLSPAN= ROWSPAN= NOWRAP }
  520.     set htmlElemAttrOptional3(TR)    {ALIGN= VALIGN= }
  521.     set htmlElemAttrChoices3(TR)    {ALIGN=CENTER ALIGN=RIGHT ALIGN=LEFT  
  522.     VALIGN=BASELINE VALIGN=BOTTOM VALIGN=MIDDLE VALIGN=TOP }
  523.     htmlSetAttrUsed 3 TR    {ALIGN= VALIGN=}
  524.     set htmlElemAttrOptional3(CAPTION)    {ALIGN=}
  525.     set htmlElemAttrChoices3(CAPTION)    {ALIGN=BOTTOM ALIGN=TOP }
  526.     htmlSetAttrUsed 3 CAPTION    {ALIGN=}    
  527.     
  528.     set htmlElemAttrRequired3(MAP)        {NAME=}
  529.     set htmlElemAttrOptional3(MAP)        {}
  530.     set htmlElemAttrOptional3(AREA)    {SHAPE= COORDS= HREF= NOHREF ALT=}
  531.     set htmlElemAttrChoices3(AREA)    {SHAPE=RECT SHAPE=CIRCLE SHAPE=POLY
  532.     SHAPE=DEFAULT}
  533.     htmlSetAttrUsed 3 AREA    {SHAPE= COORDS= HREF= NOHREF}
  534.     
  535.     set htmlElemAttrRequired3(APPLET)    {CODE= WIDTH= HEIGHT=}
  536.     set htmlElemAttrOptional3(APPLET)     {CODEBASE= HSPACE= VSPACE= ALIGN= NAME= ALT=}
  537.     set htmlElemAttrChoices3(APPLET)    {ALIGN=TOP ALIGN=MIDDLE ALIGN=BOTTOM 
  538.     ALIGN=LEFT ALIGN=RIGHT}
  539.     set htmlElemAttrNumber3(APPLET)     {VSPACE=0:i:n HSPACE=0:i:n WIDTH=1:i:n
  540.     HEIGHT=1:i:n}
  541.     htmlSetAttrUsed 3 APPLET    {CODE= WIDTH= HEIGHT= CODEBASE= ALIGN= }
  542.     set htmlElemAttrRequired3(PARAM)    {NAME= VALUE=}
  543.     set htmlElemAttrOptional3(PARAM)    {}
  544.     
  545.     set htmlElemAttrRequired3(BASE)    {HREF= }
  546.     set htmlElemAttrOptional3(BASE)    {}
  547.     set htmlElemAttrOptional3(ISINDEX)    {PROMPT=}
  548.     set htmlElemAttrOptional3(LINK)    {HREF=  REL= REV= TITLE= ID=}
  549.     htmlSetAttrUsed 3 LINK    {HREF=}
  550.     set htmlElemAttrRequired3(META)    {HTTP-EQUIV= CONTENT=}
  551.     set htmlElemAttrOptional3(META)    {NAME= }
  552. }
  553.  
  554.  
  555. #
  556. # Character entities
  557. #
  558. proc htmlNewCharVar {var val} {
  559.     global htmlSpecialCharacter
  560.     global htmlCharacterSpecial
  561.     set htmlSpecialCharacter($var) $val 
  562.     set htmlCharacterSpecial($val) $var
  563. }
  564.  
  565. proc htmlNewCapCharVar {var men val} {
  566.     global htmlSpecialCapCharacter
  567.     global htmlCapCharacterSpecial
  568.     global htmlCapCharSpecMenu
  569.     set htmlSpecialCapCharacter($var) $val 
  570.     set htmlCapCharacterSpecial($val) $var
  571.     set htmlCapCharSpecMenu($men) $val
  572. }
  573.  
  574. htmlNewCharVar "ァ" szlig
  575. htmlNewCharVar "ˆ" agrave
  576. htmlNewCharVar "‡" aacute
  577. htmlNewCharVar "‰" acirc
  578. htmlNewCharVar "‹" atilde
  579. htmlNewCharVar "Š" auml
  580. htmlNewCharVar "Œ" aring
  581. htmlNewCharVar "セ" aelig
  582. htmlNewCharVar "" ccedil
  583. htmlNewCharVar "" egrave
  584. htmlNewCharVar "Ž" eacute
  585. htmlNewCharVar "" ecirc
  586. htmlNewCharVar "‘" euml
  587. htmlNewCharVar "“" igrave
  588. htmlNewCharVar "’" iacute
  589. htmlNewCharVar "”" icirc
  590. htmlNewCharVar "•" iuml
  591. htmlNewCharVar    "eth" eth
  592. htmlNewCharVar "–" ntilde
  593. htmlNewCharVar "˜" ograve
  594. htmlNewCharVar "—" oacute
  595. htmlNewCharVar "™" ocirc
  596. htmlNewCharVar "›" otilde
  597. htmlNewCharVar "š" ouml
  598. htmlNewCharVar "ソ" oslash
  599. htmlNewCharVar "" ugrave
  600. htmlNewCharVar "œ" uacute
  601. htmlNewCharVar "ž" ucirc
  602. htmlNewCharVar "Ÿ"    uuml
  603. htmlNewCharVar "yォ" yacute
  604. htmlNewCharVar "thorn" thorn
  605. htmlNewCharVar "リ"    yuml
  606.  
  607. htmlNewCapCharVar "ヒ" "ヒ" Agrave
  608. htmlNewCapCharVar "ç" "Aォ" Aacute
  609. htmlNewCapCharVar "å" "A^" Acirc
  610. htmlNewCapCharVar "フ" "フ" Atilde
  611. htmlNewCapCharVar "\" "\" Auml
  612. htmlNewCapCharVar "" "" Aring
  613. htmlNewCapCharVar "ョ" "ョ" Aelig
  614. htmlNewCapCharVar "‚" "‚" Ccedil
  615. htmlNewCapCharVar "é" "E`" Egrave
  616. htmlNewCapCharVar "ƒ" "ƒ" Eacute
  617. htmlNewCapCharVar "æ" "E^" Ecirc
  618. htmlNewCapCharVar "è" "Eャ" Euml
  619. htmlNewCapCharVar "í" "I`" Igrave
  620. htmlNewCapCharVar "ê" "Iォ" Iacute
  621. htmlNewCapCharVar "ë" "I^" Icirc
  622. htmlNewCapCharVar "ì" "Iャ" Iuml
  623. htmlNewCapCharVar "ETH" "ETH" ETH
  624. htmlNewCapCharVar "„" "„" Ntilde
  625. htmlNewCapCharVar "ñ" "O`" Ograve
  626. htmlNewCapCharVar "î" "Oォ" Oacute
  627. htmlNewCapCharVar "ï" "O^" Ocirc
  628. htmlNewCapCharVar "ヘ" "ヘ" Otilde
  629. htmlNewCapCharVar "…" "…" Ouml
  630. htmlNewCapCharVar "ッ" "ッ" Oslash
  631. htmlNewCapCharVar "ô" "U`" Ugrave
  632. htmlNewCapCharVar "ò" "Uォ" Uacute
  633. htmlNewCapCharVar "ó" "U^" Ucirc
  634. htmlNewCapCharVar "†" "†"    Uuml
  635. htmlNewCapCharVar "Yォ" "Yォ" Yacute
  636. htmlNewCapCharVar "THORN" "THORN" THORN
  637.  
  638. set htmlSpecialSymbCharacter(¥")    quot
  639. set htmlSpecialSymbCharacter(ampersand) amp
  640. set htmlSpecialSymbCharacter([list less than]) lt
  641. set htmlSpecialSymbCharacter([list greater than]) gt
  642. set htmlSpecialSymbCharacter([list nonbreak space])    nbsp
  643. set htmlSpecialSymbCharacter(チ)    "#161"
  644. set htmlSpecialSymbCharacter(「) "#162"
  645. set htmlSpecialSymbCharacter(」)    "#163"
  646. set htmlSpecialSymbCharacter(currency)    "#164"
  647. set htmlSpecialSymbCharacter(エ)    "#165"
  648. set htmlSpecialSymbCharacter(、) "#167"
  649. set htmlSpecialSymbCharacter(ゥ)        copy
  650. set htmlSpecialSymbCharacter(サ)    "#170"
  651. set htmlSpecialSymbCharacter(ヌ)    "#171"
  652. set htmlSpecialSymbCharacter(ィ)        reg
  653. set htmlSpecialSymbCharacter(。)    "#176"
  654. set htmlSpecialSymbCharacter(ア) "#177"
  655. set htmlSpecialSymbCharacter(オ)    "#181"
  656. set htmlSpecialSymbCharacter(ヲ)    "#182"
  657. set htmlSpecialSymbCharacter(middot) "#183"
  658. set htmlSpecialSymbCharacter(シ) "#186"
  659. set htmlSpecialSymbCharacter(ネ) "#187"
  660. set htmlSpecialSymbCharacter([list a quarter]) "#188"
  661. set htmlSpecialSymbCharacter([list a half]) "#189"
  662. set htmlSpecialSymbCharacter([list three quarters]) "#190"
  663. set htmlSpecialSymbCharacter(タ)    "#191"
  664. set htmlSpecialSymbCharacter(times)    "#215"
  665. set htmlSpecialSymbCharacter(ヨ)    "#247"
  666.  
  667. # Colors for background, text and links
  668. #
  669.  
  670. proc htmlNewColor {var val } {
  671.     global htmlColorName
  672.     global htmlColorNumber
  673.     set htmlColorName($var) $val 
  674.     set htmlColorNumber($val) $var
  675. }
  676. htmlNewColor blue        "#0000FF"
  677. htmlNewColor green        "#00FF00"
  678. htmlNewColor black        "#000000"
  679. htmlNewColor red        "#FF0000"
  680. htmlNewColor yellow        "#FFFF00"
  681. htmlNewColor white        "#FFFFFF"
  682. htmlNewColor cyan        "#00FFFF"
  683. htmlNewColor magenta    "#FF00FF"
  684.  
  685. # A list of colours
  686. set basicColors [lsort [array names htmlColorName]]
  687.  
  688.  
  689. #===============================================================================
  690. # Menu Processing
  691. #===============================================================================
  692.  
  693. proc htmlMenuItem {menu item} {
  694.     global htmlMenu HOME htmlElemProc
  695.  
  696.     switch -glob $menu {
  697.         "・*" {
  698.             switch $item {
  699.                 "New document"    {htmlNewTemplate BODY}
  700.                 "Send file to browser"    {htmlSendWindow}
  701.                 "Help"            {edit -r -c "$HOME:Help:HTML Help"}
  702.                 "Palette"     { float -m $htmlMenu -n HTML -z HTML }
  703.             }
  704.         }
  705.         "Packages"    {
  706.             switch $item {
  707.                 "HTML 3.2"    {htmlLoadPackage 3}
  708.                 "Extensions" {htmlLoadPackage 1}
  709.             }
  710.         }
  711.         "HTML Utilities" {
  712.             switch $item {
  713.                 "Select Container"    {htmlBalance}
  714.                 "Select Opening"    {htmlSelectOpening 0}
  715.                 "Untag"                {htmlUnTag 0}
  716.                 "Untag and Select"    {htmlUnTag 1}
  717.                 "Remove Opening"    {htmlSelectOpening 1}
  718.                 "Change Container"    {htmlChangeContainer}
  719.                 "Change Opening"    {htmlChangeOpening}
  720.                 "Move files"        {htmlMoveFiles}
  721.                 "Remove marks"        {htmlTabDeleteAll}
  722.                 "Set Server URL"        {htmlServerURL}
  723.             }
  724.         }
  725.         "Colors" {
  726.             switch $item {
  727.                 "Reveal color" {htmlRevealColor}
  728.                 "New color" {htmlAddNewColor}
  729.                 "Change color" {htmlChangeColor}
  730.                 "Remove colors" {htmlRemoveColors}
  731.             }
  732.         }
  733.         "Character translation"    {
  734.             switch $item {
  735.                 "穴š -> HTML"        {htmlCharacterstohtml}
  736.                 "HTML -> 穴š"    {htmltoCharacters}
  737.             }
  738.         }
  739.         "URLs"    {
  740.             switch $item {
  741.                 "Add selection"    {htmlSelToURL}
  742.                 "Add clipboard"    {htmlScrapToURL}
  743.                 "Clean up"        {htmlCleanUpCache URLs}
  744.                 "Clear"            {htmlClearCache URLs}
  745.             }
  746.         }
  747.         "Windows"    {
  748.             switch $item {
  749.                 "Clean up"    {htmlCleanUpCache windows}
  750.                 "Clear"        {htmlClearCache windows}
  751.             }
  752.         }
  753.         "Footers" {
  754.             switch $item {
  755.                 "New Footer"        {htmlFooter}
  756.                 "Remove Footers"        {htmlRemoveFooter}
  757.                 "Insert Footer"        {htmlInsertFooter}
  758.             }                
  759.         }
  760.         "Check Links in" {
  761.             switch $item {
  762.                 "home page" {htmlCheckLinks "home"}
  763.                 "folder" {htmlCheckLinks "folder"}
  764.                 "file" {htmlCheckLinks "file"}
  765.             }                
  766.         }
  767.         "Extend" {
  768.             switch $item {
  769.                 "New element" {htmlCustomNewElem}
  770.                 "New attributes" {htmlCustomNewAttr}
  771.                 "New choices"    {htmlCustomNewChoice}
  772.                 "Change key binding" {htmlCustomChangeKey}
  773.                 "Change type and layout" {htmlCustomChangeType}
  774.                 "Remove attributes" {htmlCustomRemoveAttrs}
  775.                 "Remove additions" {htmlCustomRemove}
  776.             }
  777.         }
  778.         "Use Attributes"    {
  779.             htmlUseAttrs $item
  780.         }
  781.         "Headers" {
  782.              switch $item {
  783.                 "Header1"    {htmlBuildCRElem H1  1}
  784.                 "H1 no attr" {htmlBuildCRElem H1 1 NOATTR}
  785.                 "Header2"    {htmlBuildCRElem H2  1}
  786.                 "H2 no attr" {htmlBuildCRElem H2 1 NOATTR}
  787.                 "Header3"    {htmlBuildCRElem H3  1}
  788.                 "H3 no attr" {htmlBuildCRElem H3 1 NOATTR}
  789.                 "Header4"    {htmlBuildCRElem H4  1}
  790.                 "H4 no attr" {htmlBuildCRElem H4 1 NOATTR}
  791.                 "Header5"    {htmlBuildCRElem H5  1}
  792.                 "H5 no attr" {htmlBuildCRElem H5 1 NOATTR}
  793.                 "Header6"    {htmlBuildCRElem H6  1}
  794.                 "H6 no attr" {htmlBuildCRElem H6 1 NOATTR}
  795.             }
  796.         }
  797.         "Blocks and Dividers" {
  798.             switch $item {
  799.                 "Insert line breaks" {htmlInsertLineBreaks}
  800.                 "Remove line breaks" {htmlRemoveLineBreaks}
  801.                 "Insert paragraphs" {htmlInsertParagraphs}
  802.                 "Paragraph"    {htmlElemParagraph}
  803.                 "P no attr" {htmlElemParagraph NOATTR}
  804.                 "Division"        {htmlBuildCR2Elem DIV}
  805.                 "DIV no attr"        {htmlBuildCR2Elem DIV NOATTR}
  806.                 "Block quote"    {htmlBuildCR2Elem BLOCKQUOTE}
  807.                 "Address"        {htmlBuildCRElem ADDRESS}
  808.                 "Center"        {htmlBuildCR2Elem CENTER}
  809.                 "Preformatted"    {htmlBuildCR2Elem PRE}
  810.                 "Multi column"    {htmlBuildCR2Elem MULTICOL}
  811.                 "Spacing"        {htmlBuildOpening SPACER}
  812.                 "Line break"        {htmlBuildOpening BR 0 1}
  813.                 "BR no attr"        {htmlBuildOpening BR 0 1 NOATTR}
  814.                 "Horizontal rule"    {htmlBuildOpening HR 1 1}
  815.                 "HR no attr"    {htmlBuildOpening HR 1 1 NOATTR}
  816.                 "No linebreak"    {htmlBuildElem NOBR}
  817.                 "Word break"    {htmlBuildOpening WBR 0 1}
  818.             }
  819.         }
  820.         "Styles"    {
  821.             switch $item {
  822.                 "Font"            {htmlBuildElem FONT}
  823.                 "Basefont"        {htmlBuildOpening BASEFONT 1 1}
  824.                 "Bold"            {htmlBuildElem B}
  825.                 "Italic"        {htmlBuildElem I}
  826.                 "Strike out"    {htmlBuildElem STRIKE}
  827.                 "Underlined"    {htmlBuildElem U}
  828.                 "Subscript"        {htmlBuildElem SUB}
  829.                 "Superscript"    {htmlBuildElem SUP}
  830.                 "Bigger"        {htmlBuildElem BIG}
  831.                 "Smaller"        {htmlBuildElem SMALL}
  832.                 "Emphasis"        {htmlBuildElem EM}
  833.                 "Strong"        {htmlBuildElem STRONG}
  834.                 "Definition"    {htmlBuildElem DFN}
  835.                 "Code"            {htmlBuildElem CODE}
  836.                 "Variable"        {htmlBuildElem VAR}
  837.                 "Citation"        {htmlBuildElem CITE}
  838.                 "Keyboard"        {htmlBuildElem KBD}
  839.                 "Typewriter"    {htmlBuildElem TT}
  840.                 "Sample"        {htmlBuildElem SAMP}
  841.                 "Blinking"        {htmlBuildElem BLINK}
  842.             }
  843.         }
  844.         "Links"    {
  845.             switch $item {
  846.                 "Link or Anchor" {htmlBuildElem A}
  847.                 "Image"    {htmlBuildOpening IMG}
  848.                 "Embed" {htmlBuildOpening EMBED}
  849.                 "No embed" {htmlBuildCR2Elem NOEMBED}
  850.             }
  851.         }
  852.         "Plug-ins" {
  853.             switch $item {
  854.                 "General" {htmlBuildOpening EMBED}
  855.                 "LiveAudio" {htmlBuildOpening EMBED 0 0 LIVEAUDIO}
  856.                 "LiveVideo" {htmlBuildOpening EMBED 0 0 LIVEVIDEO}
  857.                 "QuickTime Movie" {htmlBuildOpening EMBED 0 0 "QUICKTIME MOVIE"}
  858.                 "QuickTime VR" {htmlBuildOpening EMBED 0 0 "QUICKTIME VR"}
  859.                 "RealAudio"    {htmlBuildOpening EMBED 0 0 REALAUDIO}
  860.                 "No embed" {htmlBuildCR2Elem NOEMBED}
  861.             }
  862.         }
  863.         "Lists"    {
  864.             switch $item {
  865.                 "Make list"    {htmlMakeList}
  866.                 "Bulleted"    {htmlBuildList UL "LI IN UL" UL}
  867.                 "UL no attr"    {htmlBuildList UL NOATTR NOATTR}
  868.                 "New bulleted item" {htmlElemListEntry "LI IN UL"}
  869.                 "Numbered"    {htmlBuildList OL "LI IN OL" OL}
  870.                 "OL no attr"    {htmlBuildList OL NOATTR NOATTR}
  871.                 "New numbered item" {htmlElemListEntry "LI IN OL"}
  872.                 "Directory"    {htmlBuildList DIR LI}
  873.                 "Menu"        {htmlBuildList MENU LI}
  874.                 "New list item"    {htmlElemListEntry LI}
  875.                 "Discursive"    {htmlBuildDiscList}
  876.                 "New discursive entry"    {htmlElemDiscEntry}
  877.             }
  878.         }
  879.         "Forms" {
  880.             switch $item {
  881.                 "Form"        {htmlBuildCR2Elem FORM}
  882.                 "Text"        {htmlBuildInputElem TEXT}
  883.                 "Checkbox"    {htmlBuildInputElem CHECKBOX}
  884.                 "Button"    {htmlBuildInputElem BUTTON}
  885.                 "Radio"        {htmlBuildInputElem RADIO}
  886.                 "Submit"        {htmlBuildInputElem SUBMIT}
  887.                 "Reset"        {htmlBuildInputElem RESET}
  888.                 "Password"    {htmlBuildInputElem PASSWORD}
  889.                 "Hidden"        {htmlBuildInputElem HIDDEN}
  890.                 "Image"        {htmlBuildInputElem IMAGE}
  891.                 "File upload" {htmlBuildInputElem FILE}
  892.                 "Select"        {htmlBuildCR2Elem SELECT}
  893.                 "Option"        {htmlBuildOpening OPTION 1 0}
  894.                 "Textarea"    {htmlBuildCRElem TEXTAREA}
  895.             }
  896.         }
  897.         "Tables" {
  898.             switch $item {
  899.                 "Table template" {htmlTableTemplate}
  900.                 "Tabs to Rows"        {htmltabsToRows}
  901.                 "Rows to Tabs"        {htmlrowsToTabs}
  902.                 Table    {htmlBuildCR2Elem TABLE}
  903.                 Row        {htmlBuildCR2Elem TR}
  904.                 "TR no attr"        {htmlBuildCR2Elem TR NOATTR}
  905.                 Header        {htmlBuildElem TH}
  906.                 "TH no attr"        {htmlBuildElem TH NOATTR}
  907.                 Cell        {htmlBuildElem TD}
  908.                 "TD no attr"        {htmlBuildElem TD NOATTR}
  909.                 Caption    {htmlBuildCRElem CAPTION}
  910.             }
  911.         }
  912.         "Frames" {
  913.             switch $item {
  914.                 "New doc. with frames"    {htmlNewTemplate FRAMESET}
  915.                 Frameset        {htmlBuildCR2Elem FRAMESET}
  916.                 Frame        {htmlBuildOpening FRAME 0 1}
  917.                 "No frames"    {htmlBuildCR2Elem NOFRAMES}
  918.             }
  919.         }
  920.         "Image maps" {
  921.             switch $item {
  922.                 Map        {htmlBuildCR2Elem MAP}
  923.                 Area    {htmlBuildOpening AREA 0 1}
  924.             }
  925.         }
  926.         "Java"    {
  927.             switch $item {
  928.                 Applet    {htmlBuildCR2Elem APPLET}
  929.                 Parameter {htmlBuildOpening PARAM 0 1}
  930.                 Script    {htmlBuildCR2Elem SCRIPT}
  931.                 "No script" {htmlBuildCR2Elem NOSCRIPT}
  932.             }
  933.         }
  934.         "Other"    {
  935.             switch $item {
  936.                 "Comment"    {htmlElemComment}
  937.                 "Base"    {htmlBuildOpening BASE 1 1}
  938.                 "Isindex" {htmlBuildOpening ISINDEX 1 1}
  939.                 "Link"    {htmlBuildOpening LINK 1 1}
  940.                 "Meta"    {htmlBuildOpening META 1 1}
  941.                 "Comment line" {htmlDividingLine}
  942.             }
  943.         }
  944.         "Character Entities"    {
  945.             switch $item {
  946.                 "Add"    {htmlAddCommonChars}
  947.                 "Default" {htmlDefaultCommonChars}
  948.                 "Clear"    {htmlClearCommonChars}
  949.                 default        {htmlInsertCharacter $item}
  950.             }
  951.         }
  952.         "small chars" {
  953.             switch $item {
  954.                 default        {htmlInsertCharacter $item}
  955.             }
  956.         }
  957.         "capital chars" {
  958.             switch $item {
  959.                 default        {htmlInsertCharacter $item}
  960.             }
  961.         }
  962.         "other chars" {
  963.             switch $item {
  964.                 default        {htmlInsertCharacter $item}
  965.             }
  966.         }
  967.         "Custom"    {
  968.             catch {eval $htmlElemProc([string toupper $item])}
  969.         }
  970.     }
  971. }
  972.  
  973. #
  974. # The menu.
  975. #
  976. # This is built up with lappends because I want parts of it to be 
  977. # dynamic, to depend on which elements have attributes defined on 
  978. # them.
  979. #
  980. # <B = control <I = option <U = shift <O = command <S = dynamical
  981.  
  982. proc htmlBuildMenu {} {
  983.     global htmlCustomMenuList htmlPackageToUse modifiedModeVars
  984.     global htmlMenu HTMLmodeVars htmlSpecialCharacter
  985.     global htmlCapCharSpecMenu htmlSpecialSymbCharacter
  986.     global htmlExtIsLoaded html32IsLoaded htmlElemKeyBinding
  987.     global htmlShownWarning htmlElemAttrOptional1 htmlElemAttrOptional3
  988.     
  989.     set commonChars $HTMLmodeVars(commonChars)
  990. # htmlPackageToUse must be set here. It's used globally in many places.
  991.     set htmlPackageToUse $HTMLmodeVars(htmlPackageToUse)
  992.     # Check if user used HTML 2.0!
  993.     if {[lsearch -exact {1 3} $htmlPackageToUse] < 0} {
  994.         set htmlPackageToUse 3
  995.         set HTMLmodeVars(htmlPackageToUse) 3
  996.         lappend modifiedModeVars {htmlPackageToUse HTMLmodeVars}
  997.     }
  998.     
  999.     if {$htmlPackageToUse == 1} {
  1000.         if {!$htmlExtIsLoaded} {
  1001.             htmlExtensions
  1002.             set htmlExtIsLoaded 1
  1003.             rename htmlExtensions ""
  1004.         }
  1005.     } else {        
  1006.         if {!$html32IsLoaded} {
  1007.             html32
  1008.             set html32IsLoaded 1
  1009.             rename html32 ""
  1010.         }
  1011.     }
  1012.     
  1013.     # start empty
  1014.     set htmlMenuList {}
  1015.  
  1016.     lappend htmlMenuList "<O<U/SSend file to browser" "Help" "Palette"
  1017.     
  1018.     # Packages
  1019.     set htmlPackagesMenu [list menu -M HTML -p htmlMenuItem -m -n Packages ¥
  1020.         [list "HTML 3.2" "Extensions" ]]
  1021.     lappend htmlMenuList $htmlPackagesMenu
  1022.     
  1023. #===============================================================================
  1024. # Utilities
  1025. #===============================================================================
  1026.     
  1027.     # Colors
  1028.     set htmlColorMenu [list menu -M HTML -p htmlMenuItem -m -n "Colors" ¥
  1029.     [list "<O<B<U/CReveal color" "New color" "Change color" "Remove colors"]]
  1030.     lappend tmpMenuList  $htmlColorMenu
  1031.     
  1032.     # Character conversion
  1033.     set htmlConvertMenu [list menu -M HTML -p htmlMenuItem -m -n "Character translation" ¥
  1034.         [list "穴š -> HTML" "HTML -> 穴š" ]]
  1035.     lappend tmpMenuList $htmlConvertMenu
  1036.  
  1037.     # URLs
  1038.     set htmlURLsMenu [list menu -M HTML -p htmlMenuItem -m -n "URLs" [list "Add selection" ¥
  1039.             "Add clipboard" "Clean up" "Clear"]]
  1040.     lappend tmpMenuList $htmlURLsMenu
  1041.     
  1042.     # Windows
  1043.     set htmlWinMenu [list menu -M HTML -p htmlMenuItem -m -n "Windows" [list ¥
  1044.             "Clean up" "Clear"]]
  1045.     lappend tmpMenuList $htmlWinMenu
  1046.     
  1047.     # Footers
  1048.     set htmlFooterMenu [list menu -M HTML -p htmlMenuItem -m -n "Footers" ¥
  1049.     [list "New Footer" "Remove Footers" "Insert Footer"]]
  1050.     lappend tmpMenuList $htmlFooterMenu
  1051.     
  1052.     # Check links
  1053.     set htmlCheckLinkMenu [list menu -M HTML -p htmlMenuItem -m -n "Check Links in" ¥
  1054.     [list "home page" "folder" "file"]]
  1055.     lappend tmpMenuList $htmlCheckLinkMenu
  1056.  
  1057.     # Extending HTML mode.
  1058.     if {$htmlPackageToUse == 1} {
  1059.         set htmlExtendMenu [list menu -M HTML -p htmlMenuItem -m -n "Extend" ¥
  1060.         [list "New element" "New attributes" "New choices" "Change key binding" ¥
  1061.         "Change type and layout" "Remove attributes" "Remove additions"]]
  1062.         lappend tmpMenuList $htmlExtendMenu
  1063.     }
  1064.     
  1065.     set htmlUtilitiesMenu [list menu -M HTML -p htmlMenuItem -m ¥
  1066.     -n "HTML Utilities" [concat $tmpMenuList ¥
  1067.     [list "(-" "<S<O/BSelect Container" "<S<O<I/BSelect Opening" ¥
  1068.     "<S<B/eUntag" "<S<B<I/eUntag and Select" "<B/fRemove Opening" ¥
  1069.     "<S<B/gChange Container" "<S<B<I/gChange Opening" "<O/cRemove marks" "(-" "Move files" ¥
  1070.     "(-" "Set Server URL"]]]
  1071.     lappend htmlMenuList $htmlUtilitiesMenu
  1072.  
  1073.  
  1074.     # Use Attributes
  1075.     # Dynamically-built list of elements whose default attributes can be selected
  1076.     
  1077.     foreach a [array names htmlElemAttrOptional$htmlPackageToUse] {
  1078.         if {[llength [set htmlElemAttrOptional${htmlPackageToUse}($a)]]} {lappend htmlPossibleToUse $a}
  1079.     }
  1080.     set htmlUseAttrsMenu [list menu -M HTML -p htmlMenuItem -m -n "Use Attributes" ¥
  1081.         [lsort $htmlPossibleToUse]]
  1082.     lappend htmlMenuList $htmlUseAttrsMenu
  1083.  
  1084.  
  1085.     # New document
  1086.     lappend htmlMenuList "(-" "<B<U<I/DNew document"
  1087.     
  1088.     # Header1, Header2...
  1089.     set htmlHeadersMenu [list menu -M HTML -p htmlMenuItem -m -n Headers ¥
  1090.     [list "<S<B<O/1Header1" "<S<B<I<O/1H1 no attr" ¥
  1091.     "<S<B<O/2Header2" "<S<B<I<O/2H2 no attr" ¥
  1092.     "<S<B<O/3Header3" "<S<B<I<O/3H3 no attr"¥
  1093.     "<S<B<O/4Header4" "<S<B<I<O/4H4 no attr"¥
  1094.     "<S<B<O/5Header5" "<S<B<I<O/5H5 no attr" ¥
  1095.     "<S<B<O/6Header6" "<S<B<I<O/6H6 no attr"]]
  1096.     
  1097.     lappend htmlMenuList $htmlHeadersMenu
  1098.     
  1099.  
  1100.     # Blocks and Dividers
  1101.     if  {$htmlPackageToUse == 1} {
  1102.         set htmlBlocksMenu [list menu -M HTML -p htmlMenuItem -m -n "Blocks and Dividers" ¥
  1103.         [list "<E<SRemove line breaks" "<SInsert line breaks" ¥
  1104.         "Insert paragraphs" "(-" ¥
  1105.         "<S<U/bParagraph" "<S<U<I/bP no attr" ¥
  1106.         "<E<S<U<O/bDivision" "<S<U<I<O/bDIV no attr" ¥
  1107.         "<B<O/QBlock quote" "<B<O/SAddress" ¥
  1108.         "<B<O/CCenter" "<B<O/PPreformatted" "<B<O/XMulti column" "<B<O/ZSpacing" ¥
  1109.         "(-" "<S<O/bLine break" "<S<I<O/bBR no attr" ¥
  1110.         "<S<B<O/HHorizontal rule" "<S<B<I<O/HHR no attr" ¥
  1111.         "<B<O/BNo linebreak" "<B<O/WWord break"]]
  1112.     } else {
  1113.         set htmlBlocksMenu [list menu -M HTML -p htmlMenuItem -m -n "Blocks and Dividers" ¥
  1114.         [list "<E<SRemove line breaks" "<SInsert line breaks" ¥
  1115.         "Insert paragraphs" "(-" ¥
  1116.         "<S<U/bParagraph" "<S<U<I/bP no attr" ¥
  1117.         "<E<S<U<O/bDivision" "<S<U<I<O/bDIV no attr" ¥
  1118.         "<B<O/QBlock quote" "<B<O/SAddress" ¥
  1119.         "<B<O/CCenter" "<B<O/PPreformatted" ¥
  1120.         "(-" "<S<O/bLine break" "<S<I<O/bBR no attr" ¥
  1121.         "<S<B<O/HHorizontal rule" "<S<B<I<O/HHR no attr"]]
  1122.     }
  1123.     
  1124.     lappend htmlMenuList $htmlBlocksMenu
  1125.  
  1126.  
  1127.     # Styles
  1128.     if {$htmlPackageToUse ==1} {
  1129.         set htmlStylesMenu [list menu -M HTML -p htmlMenuItem -m -n Styles ¥
  1130.         [list "<B<I/FFont" "<B<I/NBasefont" "(-" "<B<I/BBold" "<B<I/IItalic" ¥
  1131.         "<B<I/-Strike out" "<B<I<O/-Underlined" "<B<I/.Superscript" "<B<I/,Subscript"¥
  1132.         "<O<B<I/.Bigger" "<O<B<I/,Smaller" "<B<I/TTypewriter" "<B<I/ZBlinking" ¥
  1133.         "(-" "<B<I/EEmphasis" "<B<I/SStrong" ¥
  1134.         "<B<I/DDefinition" "<B<I/CCode" "<B<I/VVariable" ¥
  1135.         "<B<I/XCitation" "<B<I/KKeyboard" ¥
  1136.         "<B<I/PSample"]]
  1137.     } else {
  1138.         set htmlStylesMenu [list menu -M HTML -p htmlMenuItem -m -n Styles ¥
  1139.         [list  "<B<I/FFont" "(-" "<B<I/BBold" "<B<I/IItalic" ¥
  1140.         "<B<I/-Strike out" "<B<I<O/-Underlined" "<B<I/.Superscript" "<B<I/,Subscript"¥
  1141.         "<O<B<I/.Bigger" "<O<B<I/,Smaller" "<B<I/TTypewriter" "(-" "<B<I/EEmphasis"¥
  1142.         "<B<I/SStrong" "<B<I/DDefinition" "<B<I/CCode" "<B<I/VVariable" ¥
  1143.         "<B<I/XCitation" "<B<I/KKeyboard" ¥
  1144.         "<B<I/PSample" ]]
  1145.     }    
  1146.     
  1147.     lappend htmlMenuList $htmlStylesMenu
  1148.     
  1149.  
  1150.     # Links
  1151.     set htmlLinksMenu [list menu -M HTML -p htmlMenuItem -m -n Links ¥
  1152.     [list "<B<O/ALink or Anchor" ¥
  1153.     "<B<O/IImage" ]]
  1154.     
  1155.     lappend htmlMenuList $htmlLinksMenu
  1156.     
  1157.     # Plug-ins
  1158.     if {$htmlPackageToUse == 1} {
  1159.         set htmlPluginMenu [list menu -M HTML -p htmlMenuItem -m -n Plug-ins ¥
  1160.         [list "<B<O/EGeneral" "LiveAudio" "LiveVideo" "QuickTime Movie" ¥
  1161.         "QuickTime VR" "RealAudio" (- "<B<O/NNo embed"]]
  1162.         lappend htmlMenuList $htmlPluginMenu
  1163.     }
  1164.     
  1165.     # Lists    
  1166.     set htmlListsMenu [list menu -M HTML -p htmlMenuItem -m -n Lists ¥
  1167.     [list "Make list" "(-" "<S<B<O/UBulleted" "<S<B<I<O/UUL no attr" ¥
  1168.     "<B<I/UNew bulleted item" "<S<B<O/ONumbered" "<S<B<I<O/OOL no attr"¥
  1169.     "<B<I/ONew numbered item" "<B<O/DDirectory" ¥
  1170.     "<B<O/MMenu" "<B<I/LNew list item" "(-" ¥
  1171.     "<U<B<O/DDiscursive" "<B<I<O/LNew discursive entry"]]
  1172.     
  1173.     lappend htmlMenuList $htmlListsMenu
  1174.  
  1175.  
  1176.     # Forms
  1177.     if {$htmlPackageToUse == 1} {
  1178.         set htmlFormsMenu [list menu -M HTML -p htmlMenuItem -m -n Forms ¥
  1179.         [list "<B<U/FForm" "(-" "<B<U/TText" "<B<U/BCheckbox" "<B<U/NButton" ¥
  1180.         "<B<U/RRadio" "<B<U/SSubmit" ¥
  1181.         "<B<U/CReset" "<B<U/PPassword" "<B<U/HHidden" "<B<U/IImage" "<B<U/UFile upload" ¥
  1182.         "(-" "<B<I<U/SSelect" "<B<U/OOption" "<B<U<I/TTextarea"]]
  1183.     } else {
  1184.         set htmlFormsMenu [list menu -M HTML -p htmlMenuItem -m -n Forms ¥
  1185.         [list "<B<U/FForm" "(-" "<B<U/TText" "<B<U/BCheckbox" ¥
  1186.         "<B<U/RRadio" "<B<U/SSubmit" ¥
  1187.         "<B<U/CReset" "<B<U/PPassword" "<B<U/HHidden" "<B<U/IImage" "<B<U/UFile upload" ¥
  1188.         "(-" "<B<I<U/SSelect" "<B<U/OOption" "<B<U<I/TTextarea"]]
  1189.     }    
  1190.     
  1191.     lappend htmlMenuList $htmlFormsMenu
  1192.     
  1193.     
  1194.     # Tables
  1195.     set htmlTablesMenu [list menu -M HTML -p htmlMenuItem -m -n Tables ¥
  1196.     [list "Table template" "<E<SRows to Tabs" "<STabs to Rows" "(-" ¥
  1197.     "<U<O/TTable" "<S<U<O/RRow" "<S<U<I<O/RTR no attr" ¥
  1198.     "<S<U<O/HHeader" "<S<U<I<O/HTH no attr" ¥
  1199.     "<S<U<O/DCell" "<S<U<I<O/DTD no attr" "<U<O/CCaption"]]
  1200.     lappend htmlMenuList $htmlTablesMenu
  1201.     
  1202.  
  1203.     # Frames
  1204.     if {$htmlPackageToUse == 1} {    
  1205.         set htmlFramesMenu [list menu -M HTML -p htmlMenuItem -m -n Frames ¥
  1206.         [list "<B<U<I/FNew doc. with frames" "<B<U<I/OFrameset" ¥
  1207.         "<B<U<I/RFrame" "<B<U<I/NNo frames"]]
  1208.         lappend htmlMenuList $htmlFramesMenu
  1209.     }
  1210.     
  1211.  
  1212.     # Client-side image maps 
  1213.     set htmlImageMenu [list menu -M HTML -p htmlMenuItem -m -n "Image maps" ¥
  1214.     [list "<B<U/MMap" "<B<U/AArea"]]
  1215.     lappend htmlMenuList $htmlImageMenu
  1216.     
  1217.  
  1218.     # Java
  1219.     if {$htmlPackageToUse == 1} {    
  1220.         set htmlJavaMenu [list menu -M HTML -p htmlMenuItem -m -n "Java" ¥
  1221.         [list "<U<I<O/JApplet" "<U<I<O/PParameter" "<U<I<O/SScript" "<U<I<O/NNo script"]]
  1222.         lappend htmlMenuList $htmlJavaMenu
  1223.     } else {
  1224.         set htmlJavaMenu [list menu -M HTML -p htmlMenuItem -m -n "Java" ¥
  1225.         [list "<U<I<O/JApplet" "<U<I<O/PParameter"]]
  1226.         lappend htmlMenuList $htmlJavaMenu
  1227.     }
  1228.  
  1229.     # Other stuff, miscellaneous
  1230.     set htmlOtherMenu [list menu -M HTML -p htmlMenuItem -m -n "Other" ¥
  1231.         [list  "<B<U<I/CComment" ¥
  1232.          "<B<U<I/BBase" "<B<U<I/IIsindex" "<B<U<I/LLink" "<B<U<I/MMeta" ¥
  1233.          "Comment line"]]
  1234.     lappend htmlMenuList $htmlOtherMenu
  1235.  
  1236.     # Allow user to insert custom menu items
  1237.     
  1238.     if {$htmlPackageToUse == 1 && [info exists htmlElemKeyBinding]} {
  1239.         foreach elem [lsort [array names htmlElemKeyBinding]] {
  1240.             lappend customMenuList "$htmlElemKeyBinding($elem)[string range $elem 0 0][string tolower [string range $elem 1 end]]"
  1241.         }
  1242.         set htmlCustomMenu [list menu -M HTML -p htmlMenuItem -m -n "Custom" $customMenuList]
  1243.         lappend htmlMenuList $htmlCustomMenu
  1244.     }
  1245.     
  1246.     # Show alert if user uses old way of defining custom elements.
  1247.     if {[info exists htmlCustomMenuList]} {htmlNewElemVar}    
  1248.     
  1249. # Character entities
  1250.     foreach a [array names htmlSpecialCharacter] {
  1251.          lappend htmlCharacters $a
  1252.     }
  1253.     foreach a [array names htmlCapCharSpecMenu] {
  1254.          lappend htmlCapCharacters $a
  1255.     }
  1256.     foreach a [array names htmlSpecialSymbCharacter] {
  1257.          lappend htmlSymbCharacters $a
  1258.     }
  1259.  
  1260.     set htmlSmallCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "small chars" ¥
  1261.     [lsort $htmlCharacters ]]
  1262.     set htmlCapCharsMenu [list menu -M HTML -p htmlMenuItem -m -c -n "capital chars" ¥
  1263.     [lsort $htmlCapCharacters ]]
  1264.         set htmlSymbCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "other chars" ¥
  1265.     [lsort $htmlSymbCharacters ]]    
  1266.     set tmp $commonChars
  1267.     if {[llength $commonChars]} {lappend tmp "(-"}
  1268.     lappend tmp Add Default Clear $htmlSmallCharsMenu $htmlCapCharsMenu $htmlSymbCharsMenu
  1269.     set htmlCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Character Entities" $tmp]
  1270.     lappend htmlMenuList $htmlCharsMenu
  1271.  
  1272.  
  1273.  
  1274.     # Put it all together
  1275.     menu -M HTML -m  -p htmlMenuItem -n $htmlMenu $htmlMenuList    
  1276.     insertMenu $htmlMenu
  1277.     if {$htmlPackageToUse == 1} {
  1278.         markMenuItem -m {Packages} {Extensions} 1
  1279.     } else {
  1280.         markMenuItem -m {Packages} {HTML 3.2} 1
  1281.     }
  1282.     if {[info exists htmlShownWarning]} {enableMenuItem "HTML Utilities" Extend off}
  1283.     if {$HTMLmodeVars(useBigWindows)} {
  1284.         enableMenuItem $htmlMenu "Use Attributes" off
  1285.     }
  1286. }
  1287.  
  1288.  
  1289. #===============================================================================
  1290. # Key Bindings
  1291. #===============================================================================
  1292.  
  1293. proc htmlBindKeys {} {
  1294.     global HTMLmodeVars 
  1295.     
  1296.     catch {deleteModeBindings HTML}
  1297.     
  1298.     # tabs to tabmarks (・)
  1299.     bind '¥t'        htmlTabNext    HTML
  1300.     bind '¥t'    <s> htmlTabPrev    HTML
  1301.  
  1302.     bind ','    <zso>    {htmlInsertCharacter "less than"} HTML
  1303.     bind '.'    <zso>    {htmlInsertCharacter "greater than"} HTML
  1304.     bind '7'     <zso>    {htmlInsertCharacter ampersand}    HTML
  1305.     
  1306.     # bindings for JavaScript
  1307.     bind '¥{' <s> electricLeft        HTML
  1308.     bind '¥}' <s> electricRight    HTML
  1309.     
  1310.     # Comment line
  1311.     bind 'l' <C>  htmlDividingLine HTML
  1312. }
  1313.  
  1314. # Unbinding of keys not used in the smaller packages.
  1315. proc htmlUnbindKeys {} {
  1316.     global htmlPackageToUse htmlElemKeyBinding
  1317.     
  1318.     if {$htmlPackageToUse == 3} {
  1319.         unbind 'f' <zso> {} HTML
  1320.         unbind 'o' <zso> {} HTML
  1321.         unbind 'r' <zso> {} HTML
  1322.         unbind 'n' <zso> {} HTML
  1323.         unbind 'e' <zc>  {} HTML
  1324.         unbind 'n' <zc>     {} HTML
  1325.         foreach elem [array names htmlElemKeyBinding] {
  1326.             set keystr $htmlElemKeyBinding($elem)
  1327.             if {[string length $keystr]} {
  1328.                 set key [string tolower [string range $keystr [expr [string length $keystr] - 1] end]]
  1329.                 set mods ""
  1330.                 foreach m [split [string range $keystr 1 [expr [string length $keystr] - 3]] < ] {
  1331.                     if {$m == "B"} {append mods z}
  1332.                     if {$m == "I"} {append mods o}
  1333.                     if {$m == "U"} {append mods s}
  1334.                     if {$m == "O"} {append mods c}
  1335.                 }
  1336.                 catch {unbind '$key' <$mods> {} HTML}
  1337.             }
  1338.         }
  1339.     }
  1340. }
  1341.